package com.example.filter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.filter.OncePerRequestFilter;

import java.io.IOException;

/**
 * OncePerRequestFilter 是 Spring Security 提供的一个抽象类，确保在每个请求中只执行一次特定的过滤逻辑。
 * 它是实现自定义过滤器的基础，通常用于对请求进行预处理或后处理。（实现 JWT 会用到这个接口）
 * 提供了一种机制，以确保过滤器的逻辑在每个请求中只执行一次，非常适合需要对每个请求进行处理的场景。
 * 通过继承该类，可以轻松实现自定义过滤器适合用于记录日志、身份验证、权限检查等场景。
 *
 * 本处继承 OncePerRequestFilter 类，并重写 doFilterInternal 方法。
 * 但是需要再spring security配置类中注册自定义的过滤器
 */
public class CustomFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
                                    FilterChain filterChain) throws ServletException, IOException {
        // 自定义过滤逻辑，例如记录请求日志
        System.out.println("Request URI: " + request.getRequestURI());

        // 继续执行过滤链
        filterChain.doFilter(request, response);
    }
}
